#include <stdio.h>
#include <stdlib.h>

#define A 3.9083e-3
#define B -5.775e-7
#define C -4.183e-12

// 高性能多项式计算（霍纳法则）
float evaluate_polynomial(const float *c, int n, float t)
{
    float result = c[n]; // 初始化最高次项系数
    for (int i = n - 1; i >= 0; i--)
    {
        result = result * t + c[i]; // 嵌套乘法
    }
    return result;
}
/* pt100 在 -200~850 摄氏度的电阻值 */
float calculateR_pt100(float t)
{
    float sum = 0.0;
    if (t >= -200 && t < 0)
    {
        float c[4] = {1, A, B, C * (t - 100)};
        sum += evaluate_polynomial(c, 3, t);
        sum *= 100;
    }
    if (t >= 0 && t < 850)
    {
        float c[3] = {1, A, B};
        sum += evaluate_polynomial(c, 2, t);
        sum *= 100;
    }
    return sum;
}

int main()
{
    char input[100];
    int running = 1;
    float t;

    printf("请输入温度(摄氏度), 输入 q 退出: \n");
    while (running)
    {
        printf(">> ");
        fgets(input, sizeof(input), stdin); // 读取一行输入
        // 检查是否输入了 'q' 或 'Q' 来退出循环
        if (strcmp(input, "q\n") == 0 || strcmp(input, "Q\n") == 0)
        {
            running = 0;
            break;
        }
        // 尝试将输入转换为浮点数
        char *endptr;
        t = strtof(input, &endptr); // 使用strtof将字符串转换为浮点数
        // 检查是否转换成功且没有剩余字符
        if (endptr == input || *endptr != '\n')
        {
            printf("输入无效，请重新输入\n");
            continue; // 跳过当前循环，重新开始
        }
        printf("R = %f\n\n", calculateR_pt100(t));
    }
    return 0;
}